package com.origin.utils;

import android.app.Application;
import android.content.Context;
import android.os.Environment;
import android.util.Log;

/**
 * 文件路径工具
 */
public class PathUtils {
    private static Context _context;

    /**
     * /data/user/0/应用包名/files
     * 该目录是应用的文件存储目录，应用被卸载时，该目录一同被系统删除。
     * 默认存在，默认具备读写权限(6.0系统可以不用向用户申请)
     */
    public static String filesPath;

    /**
     * /data/user/0/应用包名/cache
     * <p>
     * 该目录是应用的文件缓存目录，应用被卸载时，该目录一同被系统删除。
     * 默认存在，默认具备读写权限。
     * 不同于getFileDir，该目录下的文件在系统内存紧张时，会被清空文件，来腾出空间供系统使用。
     * getFileDir，不会因为系统内存不足而被清空。(6.0系统可以不用向用户申请)
     */
    public static String cachePath;

    /**
     * 获取路径：/storage/emulated/0/Android/obb/应用包名
     * <p>
     * 该目录是应用的数据存放目录，一般被用来存放游戏数据包obb文件。默认存在，可读写(6.0系统可以不用向用户申请)
     */
    public static String obbPath;

    /**
     * 获取路径：/storage/emulated/0/Android/data/应用包名/cache
     * <p>
     * 默认存在，可读写。(6.0系统可以不用向用户申请)
     */
    public static String externalCacheDirPath;


    /**
     * 获取路径：/data/app/应用包名-1/base.apk
     * <p>
     * 默认存在，获取apk包路径
     */
    public static String packageCodePath;

    /**
     * 获取路径：/storage/emulated/0
     * <p>
     * 默认存在，声明权限则可读写（6.0和以后系统还需要向用户申请同意才可以）
     */
    public static String externalStorageDirectoryPath;


    /**
     * 获取路径：/data/cache
     * <p>
     * 默认存在，声明权限则可读写（6.0和以后系统还需要向用户申请同意才可以）
     */
    public static String dataCachePath;


    /**
     * /data/user/0/应用包名/app_folderPath
     * <p>
     * (6.0系统可以不用向用户申请)
     *
     * @param folderPath 文件夹名
     * @param mode       分为Private等三个权限，private代表仅能自己访问。 eg: {@link android.content.Context#MODE_PRIVATE},
     * @return
     */
    public static String getDir(String folderPath, int mode) {
        return _context.getDir(folderPath, mode).getPath();
    }

    /**
     * 获取路径: /data/user/0/应用包名/databases/folderPath
     * <p>
     * 默认存在，可读写。(6.0系统可以不用向用户申请)
     *
     * @param folderPath databases文件夹下面的文件夹
     * @return
     */
    public static String getDatabasePath(String folderPath) {
        return _context.getDatabasePath(folderPath).getPath();
    }

    /**
     * 获取路径: /storage/emulated/0/Android/data/应用包名/files/Environment的Type
     * <p>
     * 默认存在，可读写。(6.0系统可以不用向用户申请)
     *
     * @param type eg: {@link android.os.Environment#DIRECTORY_MUSIC},
     * @return
     */
    public static String getExternalFilesDirPath(String type) {
        return _context.getExternalFilesDir(type).getPath();
    }

    /**
     * 获取路径: /storage/emulated/0/Environment的Type
     * <p>
     * 默认存在，声明权限则可读写（6.0和以后系统还需要向用户申请同意才可以）
     *
     * @param type eg: {@link android.os.Environment#DIRECTORY_MUSIC},
     * @return
     */
    public static String getExternalStoragePublicDirectoryPath(String type) {
        return Environment.getExternalStoragePublicDirectory(type).getPath();
    }

    /**
     * 获取路径: /data/data/应用包名/files/type
     * <p>
     * 该目录是应用的文件存储目录，应用被卸载时，该目录一同被系统删除。默认存在，默认具备读写权限(6.0系统可以不用向用户申请)
     *
     * @param type eg: {@link android.os.Environment#DIRECTORY_MUSIC},
     * @return
     */
    public static String getFileStreamPath(String type) {
        return _context.getFileStreamPath(type).getPath();
    }

    public static void loadPath(Application context) {
        _context = context;
        filesPath = context.getFilesDir().getPath();
        cachePath = context.getCacheDir().getPath();
        obbPath = context.getObbDir().getPath();
        externalCacheDirPath = context.getExternalCacheDir().getPath();
        packageCodePath = context.getPackageCodePath();
        externalStorageDirectoryPath = Environment.getExternalStorageDirectory().getPath();
        dataCachePath = Environment.getDownloadCacheDirectory().getPath();
        String str = getFileStreamPath(Environment.DIRECTORY_MUSIC);
        Log.e("App包名  FileUtils", "loadPath : " + str);
    }

}
